
/**
 * @info    Klasse, welke betalingen afhandeld t.b.v. de Kantine Simulatie
 * @author  (Stephan Veenstra, Michel Jansma) 
 * @version (1.8)
 */

//Import util klasses voor het gebruiken van de ArrayList class !_TMP
import java.util.*;

public class Checkout {

    //Instantie variabelen definiëren van het type CheckoutLine
    private CheckoutLine line;
    //Instantie variabelen definiëren van het type int
    private int checkoutArticles;
    //Instantie variabelen definiëren van het type double
    private double checkoutContent;

    public Checkout(CheckoutLine line) {
        //Instantie variabele line initialiseren
        this.line = line;
    }
    
    /**
     * @method payBil
     * @params <Person> person
     * @info   De producten afrekenen, welke op het dienblad van de persoon staan
     * @return null
     */
    public void payBil(Person person) {
        //Dienblad, welke gekoppeld is aan de persoon
        Tray tray = person.getTray();
        //Loop door artikelen op dienblad van persoon
        for(Article article : tray.getArticles()) {
            //Artikelen overzicht
            System.out.println(
                article.getName() + "\t" + "€" + article.getPrice() //Euro sign => u20AC
            );
        }
        //Totaal prijs artikelen
        System.out.println(
            "Totaal" + "\t" + "€" + this.getPriceTrayArticles(tray) + "\n"
        );
        //Voorbijgekomen artikelen kassa updaten
        this.updateCheckoutArticles(this.getCountTrayArticles(tray));
        //Kassainhoud updaten
        this.updateCheckoutContent(this.getPriceTrayArticles(tray));
    }
    
    /**
     * SETTER METHODES
     */
    
    /**
     * @method setCheckoutArticles
     * @params <int> articles
     * @info   Instantie variabele checkoutArticles initialiseren
     * @return null
     */
    public void setCheckoutArticles(int articles) {
        this.checkoutArticles = articles;
    }
    
    /**
     * @method setCheckoutContent
     * @params <double> content
     * @info   Instantie variabele checkoutContent initialiseren
     * @return null
     */
    public void setCheckoutContent(double content) {
        this.checkoutContent = content;
    }
    
    /**
     * GETTER METHODES
     */
    
    /**
     * @method getCheckoutArticles
     * @params null
     * @info   Retourneer het aantal artikelen, welke voorbij de kassa zijn gekomen
     * @return <int> checkoutArticles
     */
    public int getCheckoutArticles() {
        return this.checkoutArticles;
    }
    
    /**
     * @method getCheckoutContent
     * @params null
     * @info   Retourneer de kassainhoud
     * @return <double> checkoutContent
     */
    public double getCheckoutContent() {
        return this.checkoutContent;
    }
    
    /**
     * UPDATE METHODES
     */
    
     /**
     * @method updateCheckoutArticles
     * @params <int> articles
     * @info   Aantal artikelen, welke voorbij de kassa zijn gekomen aanpassen
     * @return null
     */
    public void updateCheckoutArticles(int articles) {
        this.checkoutArticles += articles;
    }
    
    /**
     * @method updateCheckoutContent
     * @params <double> content
     * @info   Kassainhoud bewerken
     * @return null
     */
    public void updateCheckoutContent(double content) {
         this.checkoutContent += content;
    }
    
    /**
     * @method resetCheckout
     * @params null
     * @info   Kassa legen en geschiedenis verwijderen
     * @return null
     */
    public void resetCheckout() {
        //Klasse variabele checkoutArticles resetten
        this.setCheckoutArticles(0);
        //Klasse variabele checkoutContent resetten
        this.setCheckoutContent(0);
        // Print melding
        System.out.println("De kassa is voor vandaag GESLOTEN!");
    }
    
    
    /**
     * @method getCountTrayArticles
     * @params <Tray> tray
     * @info   Aantal artikelen van dienblad retourneren
     * @return <int> tray.getArticles().size()
     */
    public int getCountTrayArticles(Tray tray) {
        return tray.getArticles().size();
    }
    
    /**
     * @method getPriceTrayArticles
     * @params <Tray> tray
     * @info   Totale bedrag artikelen van dienblad retourneren (Gebruik makend van de Iterator)
     * @return <double> price
     */
    public double getPriceTrayArticles(Tray tray) {
        double price = 0;
        Iterator<Article> articles = tray.getArticles().iterator();
        while(articles.hasNext()) {
            price += articles.next().getPrice();
        }
        return price;
    }
    
}
